% Ejercicio "Juego de tablero"
\subsection*{\fbox{\theejercicio} - Juego de tablero}

Consid\'erese un juego de mesa basado en un tablero. Se define el siguiente lenguaje asociado a dicho juego:

\begin{itemize}
\item Con la instrucci\'on ``{\tt define tablero}'' se especifica el tama\~no del tablero.
\item Con la instrucci\'on ``{\tt define jugadores}'' se indicar\'an cu\'antos jugadores participan en cada partida.
\item Con la instrucci\'on ``{\tt define piezas}'' se especifica el n\'umero de piezas que se van a utilizar en el juego por cada jugador.
\item La instrucci\'on ``{\tt nombra}'' da nombre a estas piezas.
\item Estas tres instrucciones si aparecen, deben hacerlo las tres, en este orden, y al principio del programa. Si no aparecieran, se configurar\'{\i}a un juego (tablero, piezas, nombres) por defecto mediante la funci\'on {\tt ini\_defecto()} (por ejemplo el ajedrez -no hay que implementar esta funci\'on-).
\item La instrucci\'on ``{\tt situa}'' coloca una pieza en una celda determinada (reemplazando a la pieza que pudiera estar previamente en esta celda).
\item Con la instrucci\'on ``{\tt casilla}'' se visualiza el contenido de la casilla especificada.
\item Desde el car\'acter \verb@#@ hasta el final de la l\'{\i}nea ser\'a considerado como comentario.
\item Se deben comprobar las siguientes situaciones de error: indicar un nombre de pieza que no existe y una fila o columna fuera de las dimensiones del tablero.
\end{itemize}

El siguiente es un ejemplo de programa seg\'un este lenguaje (las l\'{\i}neas que empiezan por ``\verb@->@'' son las respuestas del programa):

\begin{verbatim}
# Mi juego de tablero
define tablero10 x 20   # defino el tablero
define jugadores 2      # existiran dos conjuntos de piezas
define piezas 4         # hay 4 piezas del jugador 1 y 4 del jugador 2

# A continuacion le doy nombre a las 8 piezas
nombra Rey-b Reina-b Torre-b Caballo-b Rey-n Reina-n Torre-n Caballo-n
situa (Reina-n, 1,1)
situa (Caballo-b, 1,2)
situa (Torre-b, 1,4)
casilla (1,2)
-> Caballo-b
situa (Rey-n, 2, 10)
casilla (2,8)
-> VACIA!
casilla (1,4)
-> Torre-b
situa (Rey-b, 1,1)
casilla (1,1)
-> Rey-b
\end{verbatim}

Consideras las siguientes estructuras para realizar el ejercicio:

\begin{verbatim}
/* Tablero que contiene el codigo de la pieza (se numeran de 0 en
   adelante */
int tablero[MAX_FILAS][MAX_COLUMNAS];

/* Nombres de las piezas: piezas[0],piezas[1] */
char piezas[MAX_PIEZAS][MAX_LONG];

/* Variable global con el numero de jugadores definidos */
int num_jugadores;

/* Variable global con el numero total de piezas */
int num_piezas;

/* Variable global con el numero de filas del tablero*/
int num_filas; 

/* Variable global con el numero de columnas del tablero */
int num_columnas; 

%union{
   int     val;
   char    nombre[MAX_LONG];
}
\end{verbatim}

% Solución del ejercicio
\subsubsection*{SOLUCI\'ON}

